package com.xjh;

import org.junit.Test;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class life {
    @Test
    public void test2() {
        //java语言 给出一个日期字符串，如何给这个字符串加一年
        String startTime = "2024-01-08";
    }

    @Test
    public void test1() {
        // java中给出两个字符串如下
        String startTime = "2024-01";
        String endTime = "2024-06";
        // 请问如何生成一个map，key是2024-01到2024-06的所有月份，value默认是0,不要使用localDate，使用Date
        Map<String, Integer> monthMap = createMonthMap(startTime, endTime);
        List<StudentDTO> caseInfoList = new ArrayList<>();
        StudentDTO studentDTO = new StudentDTO();
        StudentDTO studentDTO1 = new StudentDTO();
        StudentDTO studentDTO2 = new StudentDTO();
        studentDTO.setLarq("2023-03-08");
        studentDTO1.setLarq("2023-04-08");
        studentDTO2.setLarq("2024-04-08");
        caseInfoList.add(studentDTO);
        caseInfoList.add(studentDTO1);
        caseInfoList.add(studentDTO2);
        caseInfoList.forEach(caseInfo -> {
            for (Map.Entry<String, Integer> entry : monthMap.entrySet()) {
                // 立案超12个月的时间：立案日期加一年
                LocalDate overTwelveDate = addOneYear(caseInfo.getLarq());
                // 将当前月份的下一个月的1号转为localDate的格式
                LocalDate nextMonthOf1st = addOneMonth(entry.getKey());
                // 判断该案件的立案日期在该月的下一个月的一号前是否立案满12个月，若超期则该月超期案件加一
                if (overTwelveDate.isBefore(nextMonthOf1st)) {
                    Integer caseCount = entry.getValue();
                    caseCount++;
                    monthMap.put(entry.getKey(), caseCount);
                }
            }
        });


        // 打印Map的内容
        for (Map.Entry<String, Integer> entry : monthMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }

    private static Map<String, Integer> createMonthMap(String startTime, String endTime) {
        TreeMap<String, Integer> map = new TreeMap<>();
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("yyyy-MM")
                // 明确指定只解析年和月
                .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
                .toFormatter();

        LocalDate startDate = LocalDate.parse(startTime, formatter);
        LocalDate endDate = LocalDate.parse(endTime, formatter);

        while (!startDate.isAfter(endDate)) {
            map.put(startDate.format(formatter), 0);
            startDate = startDate.plusMonths(1); // 增加一个月
        }

        return map;
    }

    private static LocalDate addOneYear(String timeStr) {
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // 将字符串转换为LocalDate对象
        LocalDate startDate = LocalDate.parse(timeStr, formatter);
        // 给日期加一年
        LocalDate endDate = startDate.plusYears(1);
        return endDate;
    }

    private static LocalDate addOneMonth(String timeStr) {
        // yyyy-MM 转为 yyyy-MM-dd
        timeStr = timeStr + "-01";
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        // 将字符串转换为LocalDate对象
        LocalDate startDate = LocalDate.parse(timeStr, formatter);
        // 给日期加一月
        LocalDate endDate = startDate.plusMonths(1);
        return endDate;
    }
}